第三方信用卡支付总结 - Square篇
RN端
依赖库
- in-app-payments-react-native-plugin
- 文档 , Square官方封装的sdk,和IOS的SDK功能一致,但是Square的应用端SDK功能很匮乏,能做的事比网页端sdk少很多
大致流程
- 单次支付
- 情景:用户直接填写信用卡相关信息,完成支付,服务器端不保存用户相关信息
- 实现:RN端调用SDK的
startCardEntryFlow函数,APP会自动弹出官方实现好的页面让用户进行信用卡信息填写,填写成功后会调用成功的回调函数,并传入生成的nonce和信用卡信息,并进入loading状态。在回调函数中,将获得的nonce发送给后端,让后端调用对应的SDK完成支付,并返回结果。获得服务器返回结果后,RN端调用SDK的completeCardEntry函数通知SDK停止loading UI,并关闭页面,完成支付流程
- 保存成卡片
- 情景:用户只填写一次信用卡信息,信息以卡片的形式保存在个人资料中。支付时,用户选择想要使用的卡片完成支付。
- 实现:RN端调用SDK的
startCardEntryFlow函数,APP会自动弹出官方实现好的页面让用户进行信用卡信息填写,填写成功后会调用成功的回调函数,并传入生成的nonce和信用卡信息,并进入loading状态。在回调函数中,将获得的nonce发送给后端,后端拿到nonce后,调用后端SDK中生成卡片的API,生成代表卡片的token,然后将该卡片保存到服务器端的用户信息中,每个token可以唯一的代表一张卡片,可以多次使用,使用方式完全和单次支付一样,只是使用不同的token而已。
相关术语
nonce
用户填完信通卡信息后生成的token
一次性使用
以固定的前缀“corn:”开头
- nonce可以用来独立的完成一次支付,也可以用来生成一张卡片,供多次使用
card on file
可多次使用的token
通过API,将一个nonce绑定到一个square的customer上后,产生的token
能够唯一代表一张信用卡,进行消费
以固定的前缀"ccof:"开头
customer
square自己的用户系统
能够简单的通过一个用户名便可创建
没有太大作用,主要是为了建立和card on file的一个一对多的关系
一般在项目自己的用户系统创建用户时同步调用square的API创建一个customer,与项目自己的用户系统进行一对一绑定
注意点
- 关于沙盒模式
- 沙盒模式是square提供给开发的测试环境,可以测试完整的支付流程但是不会真正扣费
- 沙盒模式的app key以及secret key等等全都是独立的,需要在后台单独创建
- 沙盒模式不是随便的信用卡信息都能用来创建,需要使用官方提供的测试卡信息
- 卡号:4111 1111 1111 1111
- 时效:12/21
- cvv:111
- 邮编:11111
- 遇到问题时,可以使用square后台的API在线工具查看是不是提供的信息有错,链接
- 关于安装
- 请一定要确认与该安装教程相比,没有遗漏的步骤,链接
- 安装后,一定要测试release模式打包,因为很容易出现debug模式一切正常,release模式无法打包的情况。出现该情况,请检查该文档链接
- 尤其注意,由于RN60版本后,内核以及内置库出现了较大变化,很容易出现奇怪的bug
- 额外依赖的 SquareInAppPaymentsSDK.framework 文件有时候会出现签名检查错误的问题,不知道原因,不过可以尝试 xcode 中取消对该文件的签名检查。
- 有时候安装时操作失误,可能出现 cocoapods 中安装了同时又被手动link了一遍的情况,这时候可能 xcode 的
Link Binary With Libraries中和Copy Bundle Resources中同时出现RNSquareInAppPayments-Resources.bundle文件,这是需要去掉其中一个,避免冲突
- 关于用户系统
- 服务器自己的用户系统,需要在创建用户时,利用用户填写的资料,调用SDK同步创建一个 square 的 customer,并将对应生成的ID保存到用户信息中,之后创建卡片时,会需要将创建的卡片绑定到对应的square customer 上才能成功生成卡片。
参考
Web端
暂略
后端
暂略